package com.wowoai.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class JsonUtils {
  /**
   * 将 JSON 字符串转化为对象
   * @param json JSON 字符串
   * @param clazz 目标对象类型
   * @param <T> 目标对象的泛型类
   * @return 解析后的目标对象实例
   */
  public static <T> T toObject(String json, Class<T> clazz) {
    return JSON.parseObject(json, clazz);
  }

  /**
   * 将 JSON 对象转化为字符串
   * @param obj 目标对象
   * @return 目标对象的 JSON 字符串
   */
  public static String toJsonString(Object obj) {
    return JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue);
  }

  /**
   * 将 JSON 字符串转化为 JSONObject
   * @param json JSON 字符串
   * @return 解析后的 JSONObject 实例
   */
  public static JSONObject toJsonObject(String json) {
    return JSON.parseObject(json);
  }

  /**
   * 将 JSON 字符串转化为带泛型的对象
   *
   * @param json JSON 字符串
   * @param type 带泛型的类型
   * @param <T> 对象类型
   * @return 解析后的目标对象实例
   */
  public static <T> T toObject(String json, TypeReference<T> type) {
    return JSON.parseObject(json, type);
  }
}